package org.example.managere.service.feibiao;

import org.example.managere.dto.feibiao.AmArchivesOperationTestDto;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.Date;
import java.util.List;
import java.util.Optional;

/**
 * 电机性能试验数据服务接口
 */
public interface AmArchivesOperationTestService {
    
    /**
     * 保存电机性能试验数据
     * @param operationTestDto 电机性能试验数据DTO
     * @return 保存后的电机性能试验数据DTO
     */
    AmArchivesOperationTestDto save(AmArchivesOperationTestDto operationTestDto);
    
    /**
     * 根据ID查找电机性能试验数据
     * @param testId 试验数据ID
     * @return 可能包含电机性能试验数据的Optional
     */
    Optional<AmArchivesOperationTestDto> findById(Integer testId);
    
    /**
     * 更新电机性能试验数据
     * @param operationTestDto 电机性能试验数据DTO
     * @return 更新后的电机性能试验数据DTO
     */
    AmArchivesOperationTestDto update(AmArchivesOperationTestDto operationTestDto);
    
    /**
     * 删除电机性能试验数据
     * @param testId 试验数据ID
     */
    void deleteById(Integer testId);
    
    /**
     * 查找所有电机性能试验数据
     * @return 电机性能试验数据DTO列表
     */
    List<AmArchivesOperationTestDto> findAll();
    
    /**
     * 分页查询电机性能试验数据
     * @param pageable 分页参数
     * @return 电机性能试验数据DTO分页结果
     */
    Page<AmArchivesOperationTestDto> findAll(Pageable pageable);
    
    /**
     * 根据电机ID查询性能试验数据
     * @param motorId 电机ID
     * @return 电机性能试验数据DTO列表
     */
    List<AmArchivesOperationTestDto> findByMotorId(String motorId);
    
    /**
     * 根据试验类型查询性能试验数据
     * @param testType 试验类型
     * @return 电机性能试验数据DTO列表
     */
    List<AmArchivesOperationTestDto> findByTestType(String testType);
    
    /**
     * 根据试验时间范围查询性能试验数据
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 电机性能试验数据DTO列表
     */
    List<AmArchivesOperationTestDto> findByTestTimeBetween(Date startTime, Date endTime);
    
    /**
     * 获取电机的最新性能试验数据
     * @param motorId 电机ID
     * @param limit 限制返回记录数量
     * @return 电机性能试验数据DTO列表
     */
    List<AmArchivesOperationTestDto> findLatestTestsByMotorId(String motorId, int limit);
} 